home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include "list.h"
-
- typedef struct rapport {
- char title[30];
- char author[15];
- int date;
- } Rapport;
- int rapSz = sizeof(Rapport);
-
- static void insRap(), prRapAll(), prRap();
- static int search(), compare();
-
- main()
- {
- int id, code, search_date;
- Rapport rap;
-
- id = lDef(lSINGLY, lCHAIN);
-
- insRap(id, lFIRST, 1, "Book 1", "People", 890129);
- insRap(id, lFIRST, 2, "Book 2", "More People", 890130);
- insRap(id, lLAST, 1, "Book 3", "Lots of People", 890131);
-
- fprintf(stdout, "lGetNode\n");
- prRapAll(id);
-
- fprintf(stdout, "lGetIndxNode\n");
- code = lGetIndxNode(id, 4, &rap, rapSz);
- prRap(code, &rap);
- code = lGetIndxNode(id, 2, &rap, rapSz);
- prRap(code, &rap);
- code = lGetIndxNode(id, -1, &rap, rapSz);
- prRap(code, &rap);
- code = lGetIndxNode(id, 3, &rap, rapSz);
- prRap(code, &rap);
-
- fprintf(stdout, "lFndNode\n");
- search_date = 890129;
- code = lFndNode(id, lFIRST, search, &search_date, &rap, rapSz);
- prRap(code, &rap);
- code = lFndNode(id, lNEXT, search, &search_date, &rap, rapSz);
- prRap(code, &rap);
- code = lFndNode(id, lNEXT, search, &search_date, &rap, rapSz);
- prRap(code, &rap);
-
- code = lDump(id, "dump");
- fprintf(stdout, "lDump : %d\n", code);
-
- lDel(id);
-
- id = lUndump("dump");
- fprintf(stdout, "lUndump : %d\n", id);
-
- insRap(id, lFIRST, 4, "Book 4", "The Author", 891127);
-
- prRapAll(id);
-
- fprintf(stdout, "lFndFlagNode\n");
- code = lFndFlagNode(id, lFIRST, 1, &rap, rapSz);
- prRap(code, &rap);
- code = lFndFlagNode(id, lNEXT, 1, &rap, rapSz);
- prRap(code, &rap);
- code = lFndFlagNode(id, lFIRST, 2, &rap, rapSz);
- prRap(code, &rap);
- code = lFndFlagNode(id, lFIRST, 7, &rap, rapSz);
- prRap(code, &rap);
-
- fprintf(stdout, "Untouched list\n");
- prRapAll(id);
-
- fprintf(stdout, "lSort\n");
- lSort(id, lDESCENDING, lBUBBLE, compare);
- prRapAll(id);
-
- fprintf(stdout, "lSort\n");
- lSort(id, lASCENDING, lHEAP, compare);
- prRapAll(id);
-
- lDelAll();
- }
-
- static void
- insRap(id, where, flag, title, author, date)
- int id, where, flag, date;
- char *title, *author;
- {
- int code;
- Rapport rap;
-
- strcpy(rap.title, title);
- strcpy(rap.author, author);
- rap.date = date;
- code = lInsNode(id, where, &rap, rapSz, flag);
- }
-
- static void
- prRapAll(id)
- int id;
- {
- int code;
- Rapport rap;
-
- code = lGetNode(id, lFIRST, &rap, rapSz);
- prRap(code, &rap);
- while (code == lFIRST || code == lSUCCESS || code == lLAST) {
- code = lGetNode(id, lNEXT, &rap, rapSz);
- prRap(code, &rap);
- }
- }
-
- static void
- prRap(code, rpprt)
- int code;
- Rapport *rpprt;
- {
- if (code >= 0)
- fprintf(stdout, "Rapport : '%s' '%s' '%d'\n", rpprt->title,
- rpprt->author, rpprt->date);
- else
- fprintf(stdout, "Return code = %d\n", code);
- }
-
- static int
- search(date, rpprt)
- int *date;
- Rapport *rpprt;
- {
- if (rpprt->date > *date)
- return(lFOUND);
- else
- return(lNOT_FOUND);
- }
-
- static int
- compare(data1, data2)
- Rapport *data1, *data2;
- {
- int k = strcmp(data1->author, data2->author);
-
- if (k == 0)
- return(lSAME); /* key1 == key2 */
- else if (k > 0)
- return(l2LT1); /* key1 > key2 */
- else if (k < 0)
- return(l1LT2); /* key1 < key2 */
- }
-